package configs

import (
	"github.com/spf13/viper"
)

type Config struct {
	Server   ServerConfig
	Admin    AdminConfig
	Database DatabaseConfig
	JWT      JWTConfig
	Log      LogConfig
}

type ServerConfig struct {
	Port string
	Mode string
}

type DatabaseConfig struct {
	Driver   string
	Host     string
	Port     int
	Username string
	Password string
	DBName   string
}

type JWTConfig struct {
	Secret string
	Expire int // token 过期时间（小时）
}

type AdminConfig struct {
	Port     string `mapstructure:"port"`
	JWTKey   string `mapstructure:"jwt_key"`  // 后台 JWT 密钥
	Username string `mapstructure:"username"` // 默认管理员用户名
	Password string `mapstructure:"password"` // 默认管理员密码
}

// LogConfig 日志配置
type LogConfig struct {
	Level      string `mapstructure:"level"`       // 日志级别：debug, info, warn, error
	Format     string `mapstructure:"format"`      // 日志格式：json 或 console
	Output     string `mapstructure:"output"`      // 输出位置：stdout 或文件路径
	MaxSize    int    `mapstructure:"max_size"`    // 单个日志文件最大尺寸，单位 MB
	MaxBackups int    `mapstructure:"max_backups"` // 保留的旧日志文件最大数量
	MaxAge     int    `mapstructure:"max_age"`     // 保留的旧日志文件最大天数
	Compress   bool   `mapstructure:"compress"`    // 是否压缩旧日志文件
}

var config *Config

func Init() error {
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath(".")
	viper.AddConfigPath("./configs")
	viper.AddConfigPath("../configs")
	viper.AddConfigPath("../../configs")

	if err := viper.ReadInConfig(); err != nil {
		return err
	}

	return viper.Unmarshal(&config)
}

func GetConfig() *Config {
	return config
}
